package utils;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Random;

public class GenerateID {
	
	
	/**
	 * Metod vraca long reprezentaciju datuma, koja se sastoji od
	 * long broja nastalog konkatenacijom polja datuma.
	 * @return - long vrendnost datuma
	 * @author Uros Krkic
	 */
	private static long getMessageDateNumber(Calendar date) {
		StringBuffer dateTemp = new StringBuffer();
		dateTemp.append(date.get(GregorianCalendar.DATE));
		dateTemp.append(date.get(GregorianCalendar.MONTH) + 1);
		dateTemp.append(date.get(GregorianCalendar.YEAR));
		
		return Long.parseLong(dateTemp.toString());
	}
	
	
	/**
	 * Metod vraca long reprezentaciju vremena, koja se sastoji od
	 * long broja nastalog konkatenacijom polja vremena.
	 * @return - long vrendnost vremena
	 * @author Uros Krkic
	 */
	private static long getMessageTimeNumber(Calendar date) {
		StringBuffer timeTemp = new StringBuffer();
		int hour = date.get(GregorianCalendar.HOUR);
		if (date.get(GregorianCalendar.AM_PM) == GregorianCalendar.PM) {
			hour = hour + 12;
		}
		timeTemp.append(hour);
		timeTemp.append(date.get(GregorianCalendar.MINUTE));
		timeTemp.append(date.get(GregorianCalendar.SECOND));
	
		return Long.parseLong(timeTemp.toString());
	}


	/**
	 * Metod generise jedinstveni ID poruke.
	 * @return - ID poruke
	 * @author Uros Krkic
	 */
	public static long generateID() {
		
		Calendar date = GregorianCalendar.getInstance();
		
		Random rand = new Random();
		long d = getMessageDateNumber(date);
		long t = getMessageTimeNumber(date);
		
		return ((d * t) / (rand.nextInt(10000) + 1)) * (rand.nextInt(10000) + 1);
	}


}
